perm filename SAIIRP.FAI[S,AIL]1 blob
sn#102561 filedate 1974-05-22 generic text, type T, neo UTF8
COMPIL(IRP,,,,,,DUMMYFORGDSCISS)
DEFINE IENS1 < INTTBL,INTMOD,ENABLE,DISABLE,INTMAP>
DEFINE IEXT1 < GOGTAB,INTRPT,X22,CORGET >
IFN APRISW <
DEFINE XJBCNI <JOBCNI>
DEFINE XJBTPC <JOBTPC>
DEFINE XJBAPR <JOBAPR>
DEFINE IEXT5 <JOBCNI,JOBTPC,JOBAPR,XJBENB,APRACS>
IFN ALWAYS <
EXTERN JOBCNI,JOBTPC,JOBAPR ;THESE ARE ALWAYS EXTERNAL
>;IFN ALWAYS
>;IFN APRISW
IFE APRISW <
DEFINE IEXT5 <XJBCNI,XJBTPC,XJBAPR,JOBINT>
IFN ALWAYS <
EXTERNAL JOBINT ;THIS FELLOW IS ALWAYS EXTERNAL
>;IFN ALWAYS
>;IFE APRISW
COMPXX(IRP,< IENS1 >,< IEXT1,IEXT5 >
,<INTERRUPT STUFF>,,HIIFPOSSIB)
BEGIN IRPPKG
INTDBG←←0
IFE APRISW <
IFE INTDBG <
OPDEF DISMIS [ CALLI 400024]
>;IFE INTDBG
IFN INTDBG <
DEFINE DISMIS < JRST DSMMSR >
DSMMSR:
HRLZI P,INACS
BLT P,P
JRST @JOBTPC
INACS: BLOCK 20
>;IFN ITDBG
OPDEF INTORM [ CALLI 400026]
OPDEF INTACM [ CALLI 400027]
OPDEF INTENB [ CALLI 400025]
>;IFE APRISW
IFN APRISW <
OPDEF APRENB [ CALLI 16]
DEFINE DISMIS < JRST DSMSSR >
DSMSSR: HRLZI 17,APRACS
BLT 17,17 ;BLT BACK ALL ACS
JRST @XJBTPC
>;IFN APRISW
HERE(INTTBL)
MOVE USER,GOGTAB ;
INTTB1: MOVEI C,=110
ADD C,-1(P)
PUSHJ P,CORGET
ERR <NOT ENOUGH SPACE FOR INTSET>
SKIPN D,DISPAT(USER) ;ALREADY HABE ONE?
JRST INTTB2 ;NO
MOVSS D
HRR D,B ;D ← OLD,,NEW
BLT D,=71(B) ;COPY OLD DISPAT TABLE
JRST INTTB3
INTTB2: SETZM (B)
HRL A,B
HRRI A,1(B)
ADDI C,-1(B)
BLT A,(C)
INTTB3: HRLI B,10
MOVEM B,DISPAT(USER)
ADDI B,=36
MOVEM B,DFRINF(USER)
ADDI B,=36
HRRZM B,INTQWB(USER)
HRRZM B,INTQWP(USER)
HRRZM B,INTQRP(USER)
ADD B,-1(P)
HRRZM B,INTQWT(USER)
HRLI B,-20
MOVEM B,IPDP(USER)
ADD B,[XWD -10,20]
MOVEM B,ISPDP(USER)
SUB P,X22
JRST @2(P)
IFN INTDBG,<
INTAPR: MOVEM P,INACS+17
MOVEI P,INACS
BLT P,INACS+16
>;IFN INTDBG
HERE(INTMOD)
IFN APRISW <
MOVEM 17,APRACS+17
MOVEI 17,APRACS
BLT 17,APRACS+16 ;SAVE THE ACS
>;IFN APRISW
MOVE USER,GOGTAB
MOVE 7,XJBCNI ;PICK UP THE BITS
IFN APRISW <
ANDI 7,235110 ;BE SURE LEGIT BITS ONLY
>;IFN APRISW
MOVE P,IPDP(USER) ;A PDL FOR THIS
MOVE SP,ISPDP(USER) ;A STRING PDL
DSPIT: JFFO 7,DODISP ;DISPATCH INDEX
ERR <DRYROT: INTMOD>
DODISP:
SKIPN 7,@DISPAT(USER) ;GO DISPATCH
DISMIS ;DISMISS
PUSHJ P,(7) ;
DISMIS
IFE APRISW <
HERE(ENABLE)
SKIPA B,[ INTORM A, ]
HERE(DISABLE)
MOVE B,[ INTACM A, ]
MOVN C,-1(P)
HRLZI A,400000
LSH A,(C)
XCT B
SUB P,X22
JRST @2(P)
>;IFE APRISW
IFN APRISW <
HERE(ENABLE)
SKIPA B,[OR A,XJBENB]
HERE(DISABLE)
MOVE B,[ANDCA A,XJBENB]
MOVN C,-1(P) ;
HRLZI A,400000
LSH A,(C) ;THE BIT
EXPO <
TRO A,400000 ;REPETITIVE ENABLE (THIS MIGHT GET YOU
>;EXPO
XCT B
MOVEM A,XJBENB ;REMEMBER
APRENB A,
SUB P,X22
JRST @2(P)
>;IFN APRISW
HERE(INTMAP)
IFE APRISW <
MOVEI A,XJBCNI
MOVEM A,JOBINT
>;IFE APRISW
IFE INTDBG,<
MOVEI A,INTMOD
>;IFE INTDBG
IFN INTDBG,<
MOVEI A,INTAPR
>;IFN INTDBG
MOVEM A,XJBAPR
MOVE USER,GOGTAB
SKIPE DISPAT(USER)
JRST .+3
PUSH P,[=128]
PUSHJ P,INTTB1 ;GET MINIMAL TABLES
MOVE 10,-3(P) ;GET INDEX
POP P,-3(P) ;RET ADR
POP P,@DFRINF(USER)
POP P,@DISPAT(USER)
POPJ P,
HERE(IRPSP1)
HERE(IRPSP2)
HERE(IRPSP3)
BEND IRPPKG
ENDCOM(IRP)